1. MPC response overview

As of 23 March 2023, a total of 360,787 persons or 74,612 families have been reached by MPC interventions. A total of USD 10.9 million has been disbursed by 14 implementing agencies across 22 sub-districts.

Only beneficiaries who have received at least USD 100/family/month have been included.





2. Map of MPC beneficiaries and collective/reception centres


Data on cash response extracted from FSL earthquake tracker on March 17 2023. Data on collective centres extracted from March 15 2023.

A revised version of the map will be available for further reporting with the revised 4Ws that includes all available codes for temporay sites.



3. Geographic breakdown of beneficiaries

Coverage is highest in Afrin and Harim districts, which have been worst-hit by the earthquake.



The current distribution of beneficiaries appears to be aligned with the worst-hit districts: Harim and Afrin. The figures below only pertain to populations within the AOC of Northwest Syria and not representative of the entire district’s population.



When reviewing the district-level spread of casualties and totally- and partially-damaged houses, Harim and Afrin do stand out in terms of the magnitude of the damage. Notably, the share of damaged houses in Afrin is much higher than in Harim.

Following them, Jebel Saman and Jisr-ash-Shugur have the next most severe damage, although, as can be seen from the table below, their populations (within the area of control) are comparatively smaller.

Assessments are still ongoing and the CWG will update these tables when new data becomes available.



Although the earthquake damage is not as severe in A’zaz, Al Bab, Jarablus, Idleb and Jisr-ash-Shugur, a much higher proportion of needs in these areas remain unmet, given the low percentages of persons reached.

The establishment of subnational targets at the district and sub-district level, will go some way towards clarifying how resources should be allocated across the affected areas.



3.1 Breakdown by partner and district

Harim, by far and away has the highest concentration of partners (12), double that of the next highest district (Afrin).




3.2 Scatterplot of sub-districts

The plot below shows the total population of each sub-district on the x-axis (for the moment, all persons in these areas are assumed to be affected and are included in the PIN) and the number of beneficiaries on the y-axis.

The size of each point indicates the number of dead or wounded persons there per 100,000.



Overall, we see fair alignment between the magnitude of the needs (total population) and the number of beneficiaries – this is evidenced by the blue line showing a positive relationship.

However, we do note several mismatches – Dana seems to have received an outsized share of beneficiaries, especially when considering the casualty rate. And Kafr Takharim seems to have been allocated relatively fewer resources in comparison to the death toll there. The response in Dana may be explained by a number of variables outside the scope of the data collected by the earthquake response tracker, such as population movements. Did earthquake survivors displace to Dana with the knowledge that it was a well-served area, where a number of partners were already operational? The CWG will conduct more consultations with partners to understand such disparities.




4. Cash response actors and cash disbursed

In the scatterplot below, each point is a single cash working group partner. The x-axis indicates the number of beneficiaries reached per agency and the y-axis indicates the number of communities (admin4) reached.



USD 10.9 million has been distributed across 155 communities and 22 sub-districts in NW Syria.

The table below summarises the information in the scatterplot above in tabular form:




4.1 USD disbursed by partner

There is very good compliance with CWG standards on the transfer values of multipurpose cash interventions, as can be seen by the usd_per_fam column in the table below.



Below is a breakdown of beneficiaries and families reached by cash-based activities of all values, not just those that qualify as MPC.





5. UNHCR site tracker – searchable table


Data from UNHCR site tracker. Extracted 15 March 2023.


LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiMjMgTWFyY2ggMjAyMyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvbGxhcHNlZDogbm8NCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KDQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogNzBweDsNCiAgbWFyZ2luOiAyZW0gMjBweCA0MHB4IDIwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiTldTLUNXRyBsb2dvLlBORyIpOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpgYGANCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KICAgIGJvZHkgLm1haW4tY29udGFpbmVyIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMjgwcHg7DQogICAgfQ0KPC9zdHlsZT4NCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgZmlnLndpZHRoPTksIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5naSkNCmxpYnJhcnkocGFuZGVyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KGdncmVwZWwpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCiMgcGFuZGVyIHRhYmxlcyBhbGwgaW4gb25lIHJvdw0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIHJlcGxhY2UgDQpvcHRzIDwtIG9wdGlvbnMoa25pdHIua2FibGUuTkEgPSAiIikNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcw0Kc3VtX2JlbiA8LSBmdW5jdGlvbihkZiwgY29sdW1uX3Zhcil7DQogIA0KICBjb2x1bW5fdmFyIDwtIGVucXVvKGNvbHVtbl92YXIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIpICU+JSAjIG11c3QgYWRkIGJhbmctYmFuZw0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKG5ld19iZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKQ0KICAgIA0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcywgMiBncm91cGVkIHZhcmlhYmxlcw0Kc3VtX2JlbjIgPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIxLCBjb2x1bW5fdmFyMil7DQogIA0KICBjb2x1bW5fdmFyMSA8LSBlbnF1byhjb2x1bW5fdmFyMSkNCiAgY29sdW1uX3ZhcjIgPC0gZW5xdW8oY29sdW1uX3ZhcjIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIxLCAhIWNvbHVtbl92YXIyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCiAgICANCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiNtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCmBgYA0KDQpgYGB7ciBkYXRhfQ0KcGNvZGUzX3NoYXBlIDwtIA0KICBzZjo6c3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmZzbCA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvZnNsLmNzdiIpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJfY29kZSA9IGlmZWxzZShpcy5uYShwYXJ0bmVyX2NvZGUpLCAidGVtcF8xIiwgcGFydG5lcl9jb2RlKSkNCg0Kc2l0ZXMgPC0gcmVhZF9jc3YoIi4vZGF0YS9mb3JfcmVwb3J0L3NpdGVzLmNzdiIpDQoNCnJlbW92ZV9zaXRlcyA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvc2l0ZXNfbG9jYXRpb25zX2ZzbC5jc3YiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShsb25naXR1ZGVfeCkgJiAhaXMubmEobGF0aXR1ZGVfeSkpICU+JSANCiAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlX3giLCAibGF0aXR1ZGVfeSIpLCBjcnMgPSA0MzI2KSAlPiUNCiAgc3RfdHJhbnNmb3JtKHN0X2NycyhwY29kZTNfc2hhcGUpKSAlPiUgDQogIG11dGF0ZShpbnRlcnNlY3Rpb24gPSBhcy5pbnRlZ2VyKHN0X2ludGVyc2VjdHMoZ2VvbWV0cnksIHBjb2RlM19zaGFwZSkpLCANCiAgICAgICAgIGFyZWEgPSBpZmVsc2UoaXMubmEoaW50ZXJzZWN0aW9uKSwgIiIsIHBjb2RlM19zaGFwZSRBRE0zX1BDT0RFW2ludGVyc2VjdGlvbl0pKSAlPiUNCiAgZmlsdGVyKGlzLm5hKGludGVyc2VjdGlvbikpIA0KDQpzaXRlc19sb2NhdGlvbnNfZnNsIDwtIHJlYWRfY3N2KCIuL2RhdGEvZm9yX3JlcG9ydC9zaXRlc19sb2NhdGlvbnNfZnNsLmNzdiIpICU+JSANCiAgYW50aV9qb2luKHJlbW92ZV9zaXRlcywgYnkgPSBjKCJzaXRlX25hbWUiKSkNCg0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTA1LW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKQ0KDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCg0KIyBud19wY29kZTMgJT4lIA0KIyAgIGFzX3RpYmJsZSgpICU+JSANCiMgICB3cml0ZV9jc3YoIm53X3Bjb2RlMy5jc3YiKQ0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KIyAxLiBNUEMgcmVzcG9uc2Ugb3ZlcnZpZXcNCg0KQXMgb2YgMjMgTWFyY2ggMjAyMywgYSB0b3RhbCBvZiBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtzdW0oLiRmYW1pbGllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBmYW1pbGllcyBoYXZlIGJlZW4gcmVhY2hlZCBieSBNUEMgaW50ZXJ2ZW50aW9ucy4gDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXNidXJzZWQgYnkgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgJT4lIHB1bGwoKWAgaW1wbGVtZW50aW5nIGFnZW5jaWVzIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChhZG1pbjNwY29kZSkpICU+JSBwdWxsKClgIHN1Yi1kaXN0cmljdHMuIA0KDQpPbmx5IGJlbmVmaWNpYXJpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3QgVVNEIDEwMC9mYW1pbHkvbW9udGggaGF2ZSBiZWVuIGluY2x1ZGVkLg0KDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JQ0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSksIA0KICAgICAgICAgICAgaG91c2Vob2xkcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfdXNkID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9iZW5lZmljaWFyaWVzYCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSBpZmVsc2UoYCVfYmVuZWZpY2lhcmllc2AgPiA5OS45OCwgMTAwLCBgJV9iZW5lZmljaWFyaWVzYCkpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgY29tbXVuaXRpZXMsIHBhcnRuZXJzLCANCiAgICAgICAgIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiMzYwLDc4NyBwZW9wbGUgcmVhY2hlZCwgVVNEIDEwLjkgbWlsbGlvbiBkaXNidXJzZWQsIDIzIE1hcmNoIDIwMjMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDYsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYSIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiQmVuZWZpY2lhcnkgZmlndXJlcyBpbmNsdWRlIG9ubHkgcmVwb3J0ZWQgTVBDIHdpdGggYSBtaW5pbXVtIHRyYW5zZmVyIHZhbHVlIG9mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgMi4gTWFwIG9mIE1QQyBiZW5lZmljaWFyaWVzIGFuZCBjb2xsZWN0aXZlL3JlY2VwdGlvbiBjZW50cmVzDQoNCg0KPGJyPg0KDQoNCmBgYHtyIHBsb3RseS1zaXRlc30NCg0Kc2l0ZV9tYXAgPC0gc2l0ZXNfbG9jYXRpb25zX2ZzbCAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjNwY29kZSwgYWRtaW40cGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluNHBjb2RlIikgJT4lDQogIHJpZ2h0X2pvaW4ocGNvZGUzX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9IGMoImFkbWluM3Bjb2RlIiA9ICJBRE0zX1BDT0RFIikpICU+JSANCiAgZmlsdGVyKEFETTFfUENPREUgJWluJSBjKCJTWTAyIiwgIlNZMDciKSkgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgbXV0YXRlKHR5cGUgPSBmY3RfcmVsZXZlbCh0eXBlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJSQy9JRFAiLCAiQmVuZWZpY2lhcmllcyIpKSkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAwLjEsIGNvbG91ciA9ICJncmV5NzAiKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBwZXJzb25zLCANCiAgICAgICAgICAgICAgICAgIGNvbG91ciA9IHR5cGUsDQogICAgICAgICAgICAgICAgICB4ID0gbG9uZ2l0dWRlX3gsIHkgPSBsYXRpdHVkZV95LA0KICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCgic3ViX2Rpc3RyaWN0OiAiLCBzdWJfZGlzdHJpY3QsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlOiAiLCBzaXRlX25hbWUsICJcbiIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcnNvbnM6ICIsIHBlcnNvbnMsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZTogIiwgdHlwZSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb25feDogIiwgbG9uZ2l0dWRlX3gsICJcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhdF95OiAiLCBsYXRpdHVkZV95KSksIA0KICAgICAgICAgICAgIHNoYXBlID0gMjEsIHN0cm9rZSA9IC4yDQogICAgICAgICAgICAgIyBBZGp1c3RpbmcgYWxwaGEgd29uJ3QgYWZmZWN0IGEgcGxvdGx5DQogICAgICAgICAgICAgKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICB0aGVtZV92b2lkKCkgKyANCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSksIA0KICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArDQogIGxhYnModGl0bGUgPSAiQ29sbGVjdGl2ZS9yZWNlcHRpb24gY2VudHJlcyBhbmQgTVBDIGJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJJRFBzIGluIHJlZCwgYmVuZWZpY2lhcmllcyBpbiBibHVlLCBzaXplIHNob3dzIG51bWJlciBvZiBwZXJzb25zIikNCg0KZ2dwbG90bHkoc2l0ZV9tYXAsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkNvbGxlY3RpdmUgY2VudHJlcyBhbmQgY2FzaCByZXNwb25zZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSURQcyBpbiByZWQsIGJlbmVmaWNpYXJpZXMgaW4gYmx1ZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29uczsgY2xpY2sgYW5kIGRyYWcgdG8gem9vbTsgbW91c2Ugb3ZlciBmb3IgZGV0YWlscyIpKSkgDQoNCiMgV2lsbCB0aGlzIHdvcms/IA0KIyAlPiUgcGFydGlhbF9idW5kbGUoKQ0KDQojIGdnc2F2ZSgic2l0ZV9tYXAucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpDQpgYGANCg0KDQpEYXRhIG9uIGNhc2ggcmVzcG9uc2UgZXh0cmFjdGVkIGZyb20gW0ZTTCBlYXJ0aHF1YWtlIHRyYWNrZXJdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFLR3F0LTNZRGgyazhxTkNrc09KQW5kUlBPNTZHcTZwR3M2ZXNFUXRJRkl3L2VkaXQjZ2lkPTE4OTA5ODExMTUpIG9uIE1hcmNoIDE3IDIwMjMuIERhdGEgb24gY29sbGVjdGl2ZSBjZW50cmVzIGV4dHJhY3RlZCBmcm9tIE1hcmNoIDE1IDIwMjMuIA0KDQpBIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgbWFwIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHJlcG9ydGluZyB3aXRoIHRoZSByZXZpc2VkIDRXcyB0aGF0IGluY2x1ZGVzIGFsbCBhdmFpbGFibGUgY29kZXMgZm9yIHRlbXBvcmF5IHNpdGVzLiANCg0KDQo8YnI+PGJyPg0KDQoNCiMgMy4gR2VvZ3JhcGhpYyBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcw0KDQpDb3ZlcmFnZSBpcyBoaWdoZXN0IGluIEFmcmluIGFuZCBIYXJpbSBkaXN0cmljdHMsIHdoaWNoIGhhdmUgYmVlbiB3b3JzdC1oaXQgYnkgdGhlIGVhcnRocXVha2UuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUoZ292ZXJub3JhdGUgPSBpZmVsc2UoZ292ZXJub3JhdGUgPT0gImlkbGViIiwgIklkbGViIiwgZ292ZXJub3JhdGUpLA0KICAgICAgICAgZGlzdHJpY3QgPSBpZmVsc2UoZGlzdHJpY3QgPT0gImlkbGViIiwgIklkbGViIiwgZGlzdHJpY3QpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZW9yZGVyKGRpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSwgDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsaWIiLCAiQWxlcHBvIikpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBkaXN0cmljdCkpICsgDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiTVBDIGJlbmVmaWNpYXJpZXMgYnkgZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAxNyBNYXJjaCAyMDIzIiwgDQogICAgICAgeSA9ICIiKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQoNCmhubyAlPiUgDQogIGZpbHRlcihhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfcG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGxlZnRfam9pbigNCiAgICBmc2wgJT4lDQogICAgICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogICAgICBtdXRhdGUoZ292ZXJub3JhdGUgPSBpZmVsc2UoZ292ZXJub3JhdGUgPT0gImlkbGViIiwgIklkbGViIiwgZ292ZXJub3JhdGUpLA0KICAgICAgICAgICAgIGRpc3RyaWN0ID0gaWZlbHNlKGRpc3RyaWN0ID09ICJpZGxlYiIsICJJZGxlYiIsIGRpc3RyaWN0KSkgJT4lIA0KICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QpICU+JSANCiAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICwgIA0KICBieSA9ICJkaXN0cmljdCIpICU+JSANCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3Jlb3JkZXIoZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpLCANCiAgICAgICAgIGdvdmVybm9yYXRlID0gZmN0X3JlbGV2ZWwoZ292ZXJub3JhdGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJJZGxpYiIsICJBbGVwcG8iKSksIA0KICAgICAgICAgcGNfcmVhY2hlZCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyB0b3RhbF9wb3B1bGF0aW9uICogMTAwLCBkaWdpdHMgPSAxKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwY19yZWFjaGVkLCB5ID0gZGlzdHJpY3QpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEocGNfcmVhY2hlZCkpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJQZXJjZW50IG9mIHBvcHVsYXRpb24gcmVhY2hlZCIsIA0KICAgICAgIHN1YnRpdGxlID0gImFzIG9mIDE3IE1hcmNoIDIwMjMiLCANCiAgICAgICB5ID0gIiIsIA0KICAgICAgIHggPSAiJSBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiKSArDQogIA0KICBwbG90X2xheW91dChndWlkZXMgPSAiY29sbGVjdCIpICYgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQoNCmBgYA0KDQo8YnI+DQoNClRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbiBvZiBiZW5lZmljaWFyaWVzIGFwcGVhcnMgdG8gYmUgYWxpZ25lZCB3aXRoIHRoZSB3b3JzdC1oaXQgZGlzdHJpY3RzOiBIYXJpbSBhbmQgQWZyaW4uIFRoZSBmaWd1cmVzIGJlbG93IG9ubHkgcGVydGFpbiB0byBwb3B1bGF0aW9ucyB3aXRoaW4gdGhlIEFPQyBvZiBOb3J0aHdlc3QgU3lyaWEgYW5kIG5vdCByZXByZXNlbnRhdGl2ZSBvZiB0aGUgZW50aXJlIGRpc3RyaWN0J3MgcG9wdWxhdGlvbi4gDQoNCjxicj4NCg0KDQpgYGB7cn0NCmVxICU+JSANCiAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYgDQogICAgICAgICAgIGRpc3RyaWN0ICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGNhc3VhbHRpZXMgPSBzdW0oY2FzdWFsdGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBpbmp1cmllcyA9IHN1bShpbmp1cmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB0b3RhbGx5X2RhbWFnZWQgPSBzdW0oY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHBhcnRpYWxseV9kYW1hZ2VkID0gc3VtKGRhbWFnZWRfdW5paGFiaXRhYmxlX2hvdXNlcywgbmEucm0gPSBUUlVFKSkgJT4lDQogICMgV2hlcmUgaXMgQXJpaGEsIGFuZCB3aHkgaXMgaXQgc2hvd2luZyB1cCBoZXJlDQogIGZpbHRlcihkaXN0cmljdCAhPSAiQXJpaGEiKSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJg0KICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbikgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCBieSA9ICJkaXN0cmljdCIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZCA9IGNhc3VhbHRpZXMgKyBpbmp1cmllcywgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlcyA9IHRvdGFsbHlfZGFtYWdlZCArIHBhcnRpYWxseV9kYW1hZ2VkLCANCiAgICAgICAgIHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgd291bmRlZF9kZWFkLCB3b3VuZGVkX2RlYWRfMTAwaywgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlcywgZGFtYWdlZF9ob3VzZXNfMTAwaykgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjk5KSAlPiUgDQogIHNldF9jYXB0aW9uKCJDYXN1YWx0aWVzIGFuZCBkYW1hZ2VkIGhvdXNlcywgYWJzb2x1dGUgZmlndXJlcyBhbmQgcGVyIDEwMCwwMDAgcGVyc29ucyIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzOjYsIHBhcnQgPSAiaGVhZGVyIiwNCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJEYXRhIGZyb20gdGhlIEFzc2lzdGFuY2UgQ29vcmRpbmF0aW9uIFVuaXQsIFN5cmlhIDIwMjMwMzA3IikpDQoNCg0KYGBgDQoNCjxicj4NCg0KV2hlbiByZXZpZXdpbmcgdGhlIGRpc3RyaWN0LWxldmVsIHNwcmVhZCBvZiBjYXN1YWx0aWVzIGFuZCB0b3RhbGx5LSBhbmQgcGFydGlhbGx5LWRhbWFnZWQgaG91c2VzLCBIYXJpbSBhbmQgQWZyaW4gZG8gc3RhbmQgb3V0IGluIHRlcm1zIG9mIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGRhbWFnZS4gTm90YWJseSwgdGhlIHNoYXJlIG9mIGRhbWFnZWQgaG91c2VzIGluIEFmcmluIGlzIG11Y2ggaGlnaGVyIHRoYW4gaW4gSGFyaW0uIA0KDQpGb2xsb3dpbmcgdGhlbSwgSmViZWwgU2FtYW4gYW5kIEppc3ItYXNoLVNodWd1ciBoYXZlIHRoZSBuZXh0IG1vc3Qgc2V2ZXJlIGRhbWFnZSwgYWx0aG91Z2gsIGFzIGNhbiBiZSBzZWVuIGZyb20gdGhlIHRhYmxlIGJlbG93LCB0aGVpciBwb3B1bGF0aW9ucyAod2l0aGluIHRoZSBhcmVhIG9mIGNvbnRyb2wpIGFyZSBjb21wYXJhdGl2ZWx5IHNtYWxsZXIuIA0KDQpBc3Nlc3NtZW50cyBhcmUgc3RpbGwgb25nb2luZyBhbmQgdGhlIENXRyB3aWxsIHVwZGF0ZSB0aGVzZSB0YWJsZXMgd2hlbiBuZXcgZGF0YSBiZWNvbWVzIGF2YWlsYWJsZS4gDQoNCjxicj4NCg0KDQpgYGB7cn0NCg0KaG5vICU+JSANCiAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpICYNCiAgICAgICAgICAgYW9fYyA9PSAiTlciKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbGVmdF9qb2luKA0KICAgIGZzbCAlPiUNCiAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IGlmZWxzZShnb3Zlcm5vcmF0ZSA9PSAiaWRsZWIiLCAiSWRsZWIiLCBnb3Zlcm5vcmF0ZSksDQogICAgICAgICAgICAgZGlzdHJpY3QgPSBpZmVsc2UoZGlzdHJpY3QgPT0gImlkbGViIiwgIklkbGViIiwgZGlzdHJpY3QpKSAlPiUgDQogICAgICBncm91cF9ieShkaXN0cmljdCkgJT4lIA0KICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICAgICAgcGFydG5lcnMgPSBuX2Rpc3RpbmN0KHBhcnRuZXJfY29kZSkpICwgIA0KICBieSA9ICJkaXN0cmljdCIpICU+JSANCiAgbXV0YXRlKGAlX3JlYWNoZWRgID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIHJlbG9jYXRlKHBhcnRuZXJzLCAuYWZ0ZXIgPSBsYXN0X2NvbCgpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkgJT4lIA0KICBzZXRfY2FwdGlvbigiUGVyY2VudGFnZSBvZiBwb3B1bGF0aW9uIHJlYWNoZWQgYnkgZGlzdHJpY3QiKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMywgcGFydCA9ICJoZWFkZXIiLCANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJUb3RhbCBwb3B1bGF0aW9uIG9mIHN1Yi1kaXN0cmljdHMgd2l0aGluIHRoZSBOVyBBT0MsIHBlcnNvbnMgbm90IHJlc2lkaW5nIGluIHRoZSBOVyBBT0MgaGF2ZSBiZWVuIGV4Y2x1ZGVkIGZyb20gdGhpcyB0b3RhbCIpKQ0KYGBgDQoNCjxicj4NCg0KQWx0aG91Z2ggdGhlIGVhcnRocXVha2UgZGFtYWdlIGlzIG5vdCBhcyBzZXZlcmUgaW4gQSd6YXosIEFsIEJhYiwgSmFyYWJsdXMsIElkbGViIGFuZCBKaXNyLWFzaC1TaHVndXIsIGEgbXVjaCBoaWdoZXIgcHJvcG9ydGlvbiBvZiBuZWVkcyBpbiB0aGVzZSBhcmVhcyByZW1haW4gdW5tZXQsIGdpdmVuIHRoZSBsb3cgcGVyY2VudGFnZXMgb2YgcGVyc29ucyByZWFjaGVkLiANCg0KVGhlIGVzdGFibGlzaG1lbnQgb2Ygc3VibmF0aW9uYWwgdGFyZ2V0cyBhdCB0aGUgZGlzdHJpY3QgYW5kIHN1Yi1kaXN0cmljdCBsZXZlbCwgd2lsbCBnbyBzb21lIHdheSB0b3dhcmRzIGNsYXJpZnlpbmcgaG93IHJlc291cmNlcyBzaG91bGQgYmUgYWxsb2NhdGVkIGFjcm9zcyB0aGUgYWZmZWN0ZWQgYXJlYXMuIA0KDQoNCjxicj48YnI+DQoNCiMjIDMuMSBCcmVha2Rvd24gYnkgcGFydG5lciBhbmQgZGlzdHJpY3QNCg0KSGFyaW0sIGJ5IGZhciBhbmQgYXdheSBoYXMgdGhlIGhpZ2hlc3QgY29uY2VudHJhdGlvbiBvZiBwYXJ0bmVycyAoMTIpLCBkb3VibGUgdGhhdCBvZiB0aGUgbmV4dCBoaWdoZXN0IGRpc3RyaWN0IChBZnJpbikuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KDQoNCnN0YWNrX3RleHQgPC0gZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3JlbGV2ZWwoZGlzdHJpY3QsIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsIA0KICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpKQ0KDQpzdGFjayA8LSBmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGRpc3RyaWN0LCBwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZWxldmVsKGRpc3RyaWN0LCBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpLCANCiAgICAgICAgIGRpc3RyaWN0ID0gZmN0X3JldihkaXN0cmljdCkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSBkaXN0cmljdCwgDQogICAgICAgICAgICAgeCA9IGJlbmVmaWNpYXJpZXMpKSArDQogIGdlb21fY29sKGFlcyhmaWxsID0gcGFydG5lcl9jb2RlKSkgKyANCiAgZ2VvbV90ZXh0KGRhdGEgPSBzdGFja190ZXh0LCANCiAgICAgICAgICAgIGFlcyh4ID0gdG90YWwgKyA2MDAwLCANCiAgICAgICAgICAgICAgICBsYWJlbCA9IHNjYWxlczo6Y29tbWEodG90YWwpKSkgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KICBsYWJzKHkgPSAiIiwgDQogICAgICAgeCA9ICJCZW5lZmljaWFyaWVzIiwgDQogICAgICAgdGl0bGUgPSAiUGFydG5lciBhY2hpZXZlbWVudHMgYnkgZGlzdHJpY3QsIDIwMjMwMzE3IikgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpnZ3Bsb3RseShzdGFjaywgdG9vbHRpcCA9IGMoImZpbGwiLCAieCIsICJ5IikpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJQYXJ0bmVyIGFjaGlldmVtZW50cyBieSBkaXN0cmljdCwgMjAyMzAzMTciLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3VzZSBvdmVyIGZvciBkZXRhaWxzIikpKQ0KDQpgYGANCg0KPGJyPjxicj4NCg0KIyMgMy4yIFNjYXR0ZXJwbG90IG9mIHN1Yi1kaXN0cmljdHMgDQoNClRoZSBwbG90IGJlbG93IHNob3dzIHRoZSB0b3RhbCBwb3B1bGF0aW9uIG9mIGVhY2ggc3ViLWRpc3RyaWN0IG9uIHRoZSB4LWF4aXMgKGZvciB0aGUgbW9tZW50LCBhbGwgcGVyc29ucyBpbiB0aGVzZSBhcmVhcyBhcmUgYXNzdW1lZCB0byBiZSBhZmZlY3RlZCBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBQSU4pIGFuZCB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgb24gdGhlIHktYXhpcy4gDQoNClRoZSBzaXplIG9mIGVhY2ggcG9pbnQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGVhZCBvciB3b3VuZGVkIHBlcnNvbnMgdGhlcmUgcGVyIDEwMCwwMDAuIA0KDQo8YnI+DQoNCg0KYGBge3IsIGRwaSA9IDMwMCwgZmlnLmhlaWdodD02fQ0KZXEgJT4lIA0KICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJiANCiAgICAgICAgICAgZGlzdHJpY3QgJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgc3ViX2Rpc3RyaWN0LCBhZG1pbjNwY29kZSkgJT4lIA0KICBzdW1tYXJpc2UoY2FzdWFsdGllcyA9IHN1bShjYXN1YWx0aWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGluanVyaWVzID0gc3VtKGluanVyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsbHlfZGFtYWdlZCA9IHN1bShjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcGFydGlhbGx5X2RhbWFnZWQgPSBzdW0oZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgIyBXaGVyZSBpcyBBcmloYSwgYW5kIHdoeSBpcyBpdCBzaG93aW5nIHVwIGhlcmUNCiAgZmlsdGVyKGRpc3RyaWN0ICE9ICJBcmloYSIpICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgbXV0YXRlKHdvdW5kZWRfZGVhZCA9IGNhc3VhbHRpZXMgKyBpbmp1cmllcywgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlcyA9IHRvdGFsbHlfZGFtYWdlZCArIHBhcnRpYWxseV9kYW1hZ2VkLCANCiAgICAgICAgIHdvdW5kZWRfZGVhZF8xMDBrID0gcm91bmQod291bmRlZF9kZWFkIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXNfMTAwayA9IHJvdW5kKGRhbWFnZWRfaG91c2VzIC8gcG9wdWxhdGlvbiAqIDEwMDAwMCwgZGlnaXRzID0gMikpICU+JSANCiAgICBsZWZ0X2pvaW4oZnNsICU+JSANCiAgICAgICAgICAgICAgICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogICAgICAgICAgICAgICAgZ3JvdXBfYnkoYWRtaW4zcGNvZGUpICU+JSANCiAgICAgICAgICAgICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSwgDQogICAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwb3B1bGF0aW9uLCB5ID0gYmVuZWZpY2lhcmllcykpICsgDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSB3b3VuZGVkX2RlYWRfMTAwaykpICsgDQogIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBzdWJfZGlzdHJpY3QpLA0KICAgICAgICAgICAgICAgICAgIHBvaW50LnBhZGRpbmcgPSAuNSwgDQogICAgICAgICAgICAgICAgICAgc2VnbWVudC5jb2xvciA9ICJncmV5NTAiLCBzaXplID0gMykgKw0KICBzY2FsZV94X2xvZzEwKGJyZWFrcyA9IGMoMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDAsIDMwMDAwMCwgMTAwMDAwMCksIA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoMCwgMTAwMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDApLA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9zaXplKGJyZWFrcyA9IGMoMCwgMTAwLCA1MDAsIDEwMDAsIDMwMDApKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGNvbG91ciA9ICJibHVlIiwgc2l6ZSA9IC41KSArDQogIGxhYnModGl0bGUgPSAiUG9wdWxhdGlvbiBhbmQgTVBDIGJlbmVmaWNpYXJpZXMgYnkgc3ViLWRpc3RyaWN0IiwNCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIGluZGljYXRlcyBkZWFkL3dvdW5kZWQgcGVyIDEwMCwwMDAwIiwgDQogICAgICAgeCA9ICJQb3B1bGF0aW9uIiwgDQogICAgICAgeSA9ICJCZW5lZmljaWFyaWVzIiwgDQogICAgICAgc2l6ZSA9ICJEZWFkL3dvdW5kZWRcbnBlciAxMDBrIiwgDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gQXNzaXN0YW5jZSBDb29yZGluYXRpb24gVW5pdCBhbmQgRm9vZCBTZWN1cml0eSBhbmQgTGl2ZWxpaG9vZHMgQ2x1c3RlciIpICsNCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKQ0KYGBgDQoNCjxicj4NCg0KT3ZlcmFsbCwgd2Ugc2VlIGZhaXIgYWxpZ25tZW50IGJldHdlZW4gdGhlIG1hZ25pdHVkZSBvZiB0aGUgbmVlZHMgKHRvdGFsIHBvcHVsYXRpb24pIGFuZCB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgLS0gdGhpcyBpcyBldmlkZW5jZWQgYnkgdGhlIGJsdWUgbGluZSBzaG93aW5nIGEgcG9zaXRpdmUgcmVsYXRpb25zaGlwLiANCg0KSG93ZXZlciwgd2UgZG8gbm90ZSBzZXZlcmFsIG1pc21hdGNoZXMgLS0gRGFuYSBzZWVtcyB0byBoYXZlIHJlY2VpdmVkIGFuIG91dHNpemVkIHNoYXJlIG9mIGJlbmVmaWNpYXJpZXMsIGVzcGVjaWFsbHkgd2hlbiBjb25zaWRlcmluZyB0aGUgY2FzdWFsdHkgcmF0ZS4gQW5kIEthZnIgVGFraGFyaW0gc2VlbXMgdG8gaGF2ZSBiZWVuIGFsbG9jYXRlZCByZWxhdGl2ZWx5IGZld2VyIHJlc291cmNlcyBpbiBjb21wYXJpc29uIHRvIHRoZSBkZWF0aCB0b2xsIHRoZXJlLiBUaGUgcmVzcG9uc2UgaW4gRGFuYSBtYXkgYmUgZXhwbGFpbmVkIGJ5IGEgbnVtYmVyIG9mIHZhcmlhYmxlcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgZGF0YSBjb2xsZWN0ZWQgYnkgdGhlIGVhcnRocXVha2UgcmVzcG9uc2UgdHJhY2tlciwgc3VjaCBhcyBwb3B1bGF0aW9uIG1vdmVtZW50cy4gRGlkIGVhcnRocXVha2Ugc3Vydml2b3JzIGRpc3BsYWNlIHRvIERhbmEgd2l0aCB0aGUga25vd2xlZGdlIHRoYXQgaXQgd2FzIGEgd2VsbC1zZXJ2ZWQgYXJlYSwgd2hlcmUgYSBudW1iZXIgb2YgcGFydG5lcnMgd2VyZSBhbHJlYWR5IG9wZXJhdGlvbmFsPyBUaGUgQ1dHIHdpbGwgY29uZHVjdCBtb3JlIGNvbnN1bHRhdGlvbnMgd2l0aCBwYXJ0bmVycyB0byB1bmRlcnN0YW5kIHN1Y2ggZGlzcGFyaXRpZXMuDQoNCg0KPGJyPjxicj48YnI+DQoNCg0KIyA0LiBDYXNoIHJlc3BvbnNlIGFjdG9ycyBhbmQgY2FzaCBkaXNidXJzZWQNCg0KSW4gdGhlIHNjYXR0ZXJwbG90IGJlbG93LCBlYWNoIHBvaW50IGlzIGEgc2luZ2xlIGNhc2ggd29ya2luZyBncm91cCBwYXJ0bmVyLiBUaGUgeC1heGlzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBwZXIgYWdlbmN5IGFuZCB0aGUgeS1heGlzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNvbW11bml0aWVzIChhZG1pbjQpIHJlYWNoZWQuIA0KDQo8YnI+DQoNCmBgYHtyIHRvdGFscywgZXZhbCA9IEZBTFNFfQ0KDQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdXNkX3RvdGFsID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkNCg0KYGBgDQoNCg0KDQpgYGB7ciBwYXJ0bmVyLXNjYXR0ZXJ9DQpwYXJ0bmVyX3NjYXR0ZXIgPC0gZnNsICU+JSANCiAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gY29tbXVuaXRpZXMpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBiZW5lZmljaWFyaWVzLCANCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMChwYXJ0bmVyX2NvZGUsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzOiAiLCBmb3JtYXQoYmVuZWZpY2lhcmllcywgYmlnLm1hcmsgPSAiLCIpLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbXVuaXRpZXM6ICIsIGNvbW11bml0aWVzKSkpICsgDQogIHNjYWxlX3hfbG9nMTAobGFiZWxzID0gY29tbWEpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgbGFicyh4ID0gIkJlbmVmaWNpYXJpZXMgcmVhY2hlZCIsIA0KICAgICAgIHkgPSAiQ29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIkltcGxlbWVudGluZyBwYXJ0bmVycyAtLSBiZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIikNCg0KZ2dwbG90bHkocGFydG5lcl9zY2F0dGVyLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIGxheW91dChzaG93bGVnZW5kID0gVFJVRSwgbGVnZW5kID0gbGlzdChmb250ID0gKGxpc3Qoc2l6ZSA9IDYpKSkpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkJlbmVmaWNpYXJpZXMgYW5kIGNvbW11bml0aWVzIHJlYWNoZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNoIHJlc3BvbnNlIGltcGxlbWVudGluZyBwYXJ0bmVycyIsIjwvc3VwPiIpKSkNCg0KDQpgYGANCg0KPGJyPg0KDQpVU0QgYHIgcGFzdGUoZm9ybWF0KHJvdW5kKChmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lICB7c3VtKC4kdXNkX3RvdGFsKX0pIC8gMTAwMDAwMCwgMSksIHRyaW0gPSBUUlVFKSwgIm1pbGxpb24iKWAgaGFzIGJlZW4gZGlzdHJpYnV0ZWQgYWNyb3NzIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtuX2Rpc3RpbmN0KC4kYWRtaW40cGNvZGUpfWAgY29tbXVuaXRpZXMgYW5kIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtuX2Rpc3RpbmN0KC4kYWRtaW4zcGNvZGUpfWAgc3ViLWRpc3RyaWN0cyBpbiBOVyBTeXJpYS4NCg0KDQpUaGUgdGFibGUgYmVsb3cgc3VtbWFyaXNlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNjYXR0ZXJwbG90IGFib3ZlIGluIHRhYnVsYXIgZm9ybToNCg0KPGJyPg0KDQoNCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSwgDQogICAgICAgICAgIGFkbWluMnBjb2RlLCANCiAgICAgICAgICAgYWRtaW40cGNvZGUpICU+JSANCiAgc2xpY2Uod2hpY2gubWF4KGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGRpc3RyaWN0cyA9IG5fZGlzdGluY3QoYWRtaW4ycGNvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSkpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlJlYWNoIGFuZCBmb290cHJpbnQgb2YgY2FzaCByZXNwb25zZSBhY3RvcnMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpICU+JSANCiAgZm9vdG5vdGUoYXNfcGFyYWdyYXBoKCJPbmx5IHBhcnRuZXJzIHdobyBwcm92aWRlZCBtb3JlIHRoYW4gVVNEIDEwMC9mYW1pbHkvbW9udGgiKSwgDQogICAgICAgICAgIGkgPSAxLCBqID0gMSwgcGFydCA9ICJoZWFkZXIiKQ0KICANCmBgYA0KDQoNCg0KPGJyPjxicj4NCg0KDQoNCiMjIDQuMSBVU0QgZGlzYnVyc2VkIGJ5IHBhcnRuZXINCg0KVGhlcmUgaXMgdmVyeSBnb29kIGNvbXBsaWFuY2Ugd2l0aCBDV0cgc3RhbmRhcmRzIG9uIHRoZSB0cmFuc2ZlciB2YWx1ZXMgb2YgbXVsdGlwdXJwb3NlIGNhc2ggaW50ZXJ2ZW50aW9ucywgYXMgY2FuIGJlIHNlZW4gYnkgdGhlIGB1c2RfcGVyX2ZhbWAgY29sdW1uIGluIHRoZSB0YWJsZSBiZWxvdy4gDQoNCjxicj4NCg0KDQpgYGB7cn0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZSh1c2RfdG90YWwgPSBzdW0odXNkX3RvdGFsLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGZhbWlsaWVzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZSh1c2RfcGVyX2ZhbSA9IHJvdW5kKHVzZF90b3RhbCAvIGZhbWlsaWVzLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBgJV91c2RfdG90YWxgID0gcm91bmQodXNkX3RvdGFsIC8gc3VtKHVzZF90b3RhbCkgKiAxMDAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKSkgJT4lDQogIGFycmFuZ2UoZGVzYyh1c2RfdG90YWwpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlVTRCBkaXNidXJzZWQgYW5kIGZhbWlsaWVzIHJlYWNoZWQgYnkgcGFydG5lciIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIGZsZXh0YWJsZTo6c2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KQ0KYGBgDQoNCg0KPGJyPg0KDQpCZWxvdyBpcyBhIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzIGFuZCBmYW1pbGllcyByZWFjaGVkIGJ5IGNhc2gtYmFzZWQgYWN0aXZpdGllcyBvZiBhbGwgdmFsdWVzLCBub3QganVzdCB0aG9zZSB0aGF0IHF1YWxpZnkgYXMgTVBDLiANCg0KPGJyPg0KDQpgYGB7cn0NCmZzbCAlPiUgDQogIGZpbHRlcih1bml0ID09ICJVU0QiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KHVzZF90cmFuc2Zlcl92YWx1ZSA9IHF1YW50aXR5KSAlPiUgDQogIHN1bW1hcmlzZShmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gc3VtKGJlbmVmaWNpYXJpZXMpICogMTAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICB1c2RfdHJhbnNmZXJfdmFsdWUgPSBwYXN0ZTAoIiQiLCB1c2RfdHJhbnNmZXJfdmFsdWUpKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJVU0QgdHJhbnNmZXIgdmFsdWVzIGZvciBhbGwgY2FzaC1iYXNlZCBhY3Rpdml0aWVzLCBub3QganVzdCBNUEMiKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMywgcGFydCA9ICJoZWFkZXIiLCANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJEYXRhIGZyb20gdGhlIEZTTCB0cmFja2VyLCBhbGwgY2FzaCByZXNwb25zZSBhY3Rpdml0aWVzIHJlcG9ydGVkIikpICU+JSANCiAgZmxleHRhYmxlOjpzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDUuIFVOSENSIHNpdGUgdHJhY2tlciAtLSBzZWFyY2hhYmxlIHRhYmxlDQoNCjxicj4NCg0KRGF0YSBmcm9tIFtVTkhDUiBzaXRlIHRyYWNrZXJdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFEREJ2SVRkZzVuNGVDLWwzbTZXRWFMRTcyOTBlejloTS9lZGl0I2dpZD01NTQ4MDE5OTkpLiBFeHRyYWN0ZWQgMTUgTWFyY2ggMjAyMy4gDQoNCjxicj4NCg0KYGBge3IgZHR9DQpzaXRlcyAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICBkaXN0cmljdCwgDQogICAgICAgICBzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgY29tbXVuaXR5LCANCiAgICAgICAgIHNpdGVfbmFtZSwgDQogICAgICAgICBsb25naXR1ZGVfeCwNCiAgICAgICAgIGxhdGl0dWRlX3ksIA0KICAgICAgICAgZmFtaWxpZXMsIA0KICAgICAgICAgaW5kaXZpZHVhbHMsIA0KICAgICAgICAgZm9jYWxfcG9pbnQgPSBvcmdhbml6YXRpb25fbmFtZSwgDQogICAgICAgICBmb2NhbF9jb250YWN0ID0gcGhvbmUsIA0KICAgICAgICAgcGNvZGUgPSB0ZW1wX2NvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gQ29sbGVjdGl2ZSBzaXRlcywgbGlzdCBtYWludGFpbmVkIGJ5IFVOSENSIikpICU+JSANCiAgZm9ybWF0U3R5bGUoMCwgdGFyZ2V0ID0gInJvdyIsIGxpbmVIZWlnaHQgPSAiODAlIiwgZm9udFNpemUgPSAiODAlIikNCiAgDQpgYGANCg0KDQoNCg0KDQo=